package com.itheima.tlias.controller;

import com.itheima.tlias.common.result.Result;
import com.itheima.tlias.mapper.DeptMapper;
import com.itheima.tlias.mapper.EmpMapper;
import com.itheima.tlias.pojo.entity.Clazz;
import com.itheima.tlias.pojo.entity.Dept;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * DI : 从ioc容器中获取已经创建好的对象给属性（或成员变量）赋值
 * 给一个类的属性（成员变量）赋值，有几种方式：四种
 * 1.直接等于号赋值
 * 2.构造器赋值
 * 3.set方法
 * 3.反射
 * @Autowired 一般使用构造器赋值和set方法赋值时
 * 所以说StringDI注入有三种方式
 * 字段（属性）DI   @Resource
 * 构造器DI  @Autowired
 * set方法DI  @Autowired
 * @Resource 与@Autowired
 * 如果一个SpringBean类中值需要注入很少的其他的bean对象————优先使用@Resource
 * 如果一个SpringBean类中值需要注入很多的其他的bean对象————优先使用@Autowired  可用Lombok实现构造器注入
 *
 * SpringBean注入时要注意的问题
 * 1.非Bean 不能调用Bean
 * 2.Bean不能形成循环依赖—> 如何解决？
 *
 */
@Slf4j
@RestController
@AllArgsConstructor
public class TestApplicationContextController {
    EmpMapper empMapper;

    DeptMapper deptMapper;

    @GetMapping("/bean")
    public Result testCons(){
        log.info("empMapper:{}",empMapper);
        log.info("deptMapper:{}",deptMapper);
        return Result.success();
    }
}
